Java final 与 C++ const
全部标签 我想了解c和c++中的const内部结构。编译器如何强加恒定性?有人可以帮帮我吗? 最佳答案 一般来说,const是100%的编译器。当您声明某些内容为const时,编译器会对允许您编写的内容施加限制。它不会让您分配给const标量,通过const引用或指针分配,或调用const对象的非const函数。不保证编译器会安排任何类型的运行时保护。 关于c++-const关键字在c中是如何工作的,我们在StackOverflow上找到一个类似的问题: https:/
使用以下代码(为简洁起见摘录):颜色.h:classcolor{public:color();enumcolorType{black,blue,green,cyan,red,magenta,brown,lightgray,nocolor};colorTypegetColorType();voidsetColorType(colorTypecColortype);stringgetColorText()const;private:colorTypecColortype=nocolor;mapcolors={{black,"black"},{blue,"blue"},{green,"gre
我喜欢一致性。我最近问了使用std::begin的问题与例如std::vector::begin,并且一致的决定似乎是使用前者,因为它更通用。但我想我在泥泞中找到了一根棍子。有时,您想传达在循环遍历容器时不会更改容器,因此调用std::vector::cbegin.如果您有时这样做会使您的代码非常不对称iter=v.cbegin()其他时候做了iter=begin(v).有没有办法解决这种不对称的问题,您是否仍会推荐std::begin鉴于这些知识?为什么C++没有std::cbegin? 最佳答案 C++14有cbegin/cen
常量变量的值可以通过指针技巧改变,但是否可以这样做:classA(){intx;public:voidfunc()const{//changevalueofxhere}} 最佳答案 声明x可变classA(){mutableintx;public:voidfunc()const{//changevalueofxhere}}; 关于c++-是否可以在"const"函数中更改成员变量的值?,我们在StackOverflow上找到一个类似的问题: https://s
例如其中最好的是:std::stringf(){}或conststd::string&f(){} 最佳答案 函数不应返回对局部对象/变量的引用,因为此类对象超出范围并在函数返回时被销毁。不同的是,函数可以返回一个对象的常量或非常量引用,其范围不受函数上下文的限制。典型的例子是自定义operator:std::ostream&operator不幸的是,按值返回有其性能缺陷。正如Chris提到的,按值返回对象涉及临时对象的拷贝及其后续销毁。复制通过复制构造函数或operator=进行。.为了避免这些低效率,智能编译器可能会应用RVO或N
我正在尝试在C++中实现D语言关键字inout的语义(只是为了好玩)。根据上下文,它基本上表示以下两种情况之一:“此函数的结果将与其参数之一具有相同的常量性。”“此成员函数的结果将与您调用它的实例具有相同的常量性。”在编写诸如begin和end等成员函数时非常有用。我能够相对轻松地创建第一种情况的有效实现(尽管界面确实不漂亮):http://ideone.com/wgaDJJ然而,根据我的最佳猜测,第二个似乎是不可能的。你只能在使用模板时获得这种“自动const重载生成”,但据我所知,你不能在“this”参数上进行模板化。特别是,您会注意到此代码不工作/编译:http://ideone
我正在编写一个CustomVector类,使用标准vector在内部存储数据:templateclassCustomVector{friendclassCustomVector_ref;public:...private:std::vector_data;};然后,为了从CustomVector中提取子vector,我使用了一个类来存储指向每个数据元素的指针:templateclassCustomVector_ref{public://ReturnsthevaluestoredinCustomVector//andpointed-toby_data_refT&operator[](si
下面的程序是否有未定义的行为?#include#includestructFoo{conststd::vectorx;};intmain(){std::vectorv={1,2,3};autof=newFoo{v};const_cast(f->x[1])=42;//Legal?std::coutx[1]请注意,它不是使用const_cast从f->x中剥离常量,而是从f->中剥离常量x[x],大概由一个单独的数组表示。或者是否允许翻译假定f->x[1]在创建后是不可变的? 最佳答案 您的示例中没有未定义的行为。上面的代码不会调用未定
我注意到有很多关于浮点计算错误的讨论,这要求您使用比==更复杂的比较。然而,所有这些文章似乎都假设该值以某种方式被操纵(或双重计算),而我没有看到涵盖非常简单的常量复制的示例。请考虑以下事项:constdoublemagical_value=-10;classTest{double_val;public:Test():_val(magical_value){}boolis_special(){return_val==magical_value;}};据我了解,magical_value应该在编译时设置,以便在该点进行所有舍入。之后,将值复制到类中,并与原始值进行比较。这样的比较能保证安
我有一个带有模板参数的类,我想调用它的一个方法。它看起来像这样:templateclassFoo{public:voiddoSomething(){for(auto&t:ts){t.doSomething();}}private:std::vectorts;};这行得通,但如果T本身是常量,我想使doSomething()常量(假定T::doSomething()也将是const)。我找到了一个可能的解决方案(基于thisquestion),但我不喜欢它。template::value>typenamestd::enable_if::typedoSomething()const{for